package gov

const (
	WX_QR = "WECHATPAY_QR" //微信扫码支付
	WX_SCAN = "WECHATPAY_SCAN" //微信条码支付
	WX_APP = "WECHATPAY_APP" //微信 APP 支付
	WX_H5 = "WECHATPAY_H5" //微信 H5 支付
	WX_JSAPI = "WECHATPAY_JSAPI" //微信公众号支付
	WX_MINI = "WECHATPAY_MINI" //微信小程序支付

	ALIPAY_QR = "ALIPAY_QR" //支付宝扫码支付
	ALIPAY_SCAN = "ALIPAY_SCAN" //支付宝条码支付
	ALIPAY_APP = "ALIPAY_APP" //支付宝 APP 支付
	ALIPAY_WAP = "ALIPAY_WAP" //支付宝手机网站支付
	ALIPAY_PC = "ALIPAY_PC" //支付宝电脑网站支付

	DEPOSIT_TYPE_CONSUME = "2" //充值类型，用户消费

	BANK_TYPE_personal = "personal" //对私银行卡
	BANK_TYPE_corporate = "corporate" //对公结算账户

	//账户验证状态
	PINGPP_VERIFY_STATUS_processing = "processing" //验证中
	PINGPP_VERIFY_STATUS_succeeded = "succeeded" //验证成功
	PINGPP_VERIFY_STATUS_failed = "failed" //验证失败
	PINGPP_VERIFY_STATUS_needless = "needless" //无需验证
	PINGPP_VERIFY_STATUS_blocked = "blocked" //验证锁定中，需联系银行业务人员触发重新打款
)


//查询用户
type QueryUser struct {
	OutUserId string
}

//查询用户返回参数
type ReplyQueryUser struct {
	OutUserId string `json:"out_user_id"`		//平台用户 Id
	OrgType string	`json:"org_type"`			//机构类型 customer-个人用户,sub_mch-企业用户
	VerifyStatus string	`json:"verify_status"` 	//验证状态 processing-认证中,unverified-未认证,verified-已认证
	Currency string	`json:"currency"`			//交易币种 目前仅支持 CNY
	BalanceAcct BalanceAcct	`json:"balance_acct"`//余额账户信息。仅在验证状态为已认证时返回
}

//用户信息-余额账户
type BalanceAcct struct {
	IsFrozen bool `json:"is_frozen"` 				//是否被冻结 冻结账户仅能接受线下入金类交易，其他交易会被拒绝。
	SettledAmount int `json:"settled_amount"` 		//已清算余额 可用于消费、转账、提现等所有资金交易。单位分。
	PendingAmount int `json:"pending_amount"` 		//在途余额 可用于消费、转账、等账户间资金交易，不可用于提现；在途余额通常会在来源的充值交易的 T+1 后变为已清算余额。单位分。
	ExpensingAmount int `json:"expensing_amount"`	//不可用余额 收款获得的余额无法再次使用，只能用于退款类交易；不可用余额通常会在来源的充值交易的 T+1 后变为已清算余额。单位分。
	//deposit_bank_acct_no string
}

//新增结算账户
type SettleAcct struct {
	OutOrderNo string `json:"out_order_no"` //平台订单号
	OutUserId string `json:"out_user_id"` //平台用户 Id
	BankAcctType string `json:"bank_acct_type"` //结算账户类型 个体工商户：对私银行卡/对公账户 企业：对公结算账户枚举值：personal-对私银行卡 corporate-对公结算账户
	BankCode string `json:"bank_code"` //开户银行编码 1、若账户类型为对私账户时，可不填写。2、账户类型为对公账户时，必传 3、详细参见[开户银行编码表]。
	BankBranchCode string `json:"bank_branch_code"` //开户银行联行号 1、若账户类型为对私账户时，是否必传取决于平台业务参数配置。 2、若账户类型为对公结算账户时，必传 3、详细参见[开户银行联行号表]。
	BankAcctNo string `json:"bank_acct_no"` //银行账号 需加密
	MobileNumber string `json:"mobile_number"` //1、银行卡预留的手机号，不填默认取当前用户信息中的手机号。
	SmsCode string `json:"sms_code"` //1、通过个人短信验证码 接口获取的短信验证码。2、结算账户类型为对公结算账户时选传，为对私银行卡类型时是否必传取决于平台业务参数配置。
}

//结算账户信息
type SettleAcctInfo struct {
	VerifyStatus string `json:"verify_status"` //账户验证状态 processing: 验证中 succeeded: 验证成功 failed: 验证失败 needless: 无需验证 blocked: 验证锁定中，需联系银行业务人员触发重新打款
	BankAcctType string `json:"bank_acct_type"` //结算账户类型 personal - 对私银行卡 corporate - 对公结算账户
	BankCode	 string `json:"bank_code"` //开户银行编码
	Name	 string `json:"name"` //开户名称
	BankBranchCode	 string `json:"bank_branch_code"` //银行联行号
	BankAddressCode string `json:"bank_address_code"` //银行省市编码
	BankAcctNo	 string `json:"bank_acct_no"` //银行账号
	MobileNumber string `json:"mobile_number"` //银行的手机号
	AcctValidation	 AcctValidation `json:"acct_validation"` //账户验证信息 当账户验证状态为 processing 时返回，可根据指引完成账户验证。
	SettleAcctId	 string `json:"settle_acct_id"` //结算账户 ID 系统生成的唯一 ID。
	OutOrderNo	 string `json:"out_order_no"` //平台订单号 平台自定义的唯一 ID。
	AcctValidationFinishedAt	 string `json:"acct_validation_finished_at"` //账户验证的成功或失败时间。
	AcctValidationFailureMsg	 string `json:"acct_validation_failure_msg"` //账户验证失败原因
}

//账户验证信息 @SettleAcctInfo
type AcctValidation struct {
	Type string `json:"type"` //验证类型 1: 平台用户向银行汇款指定金额 2: 银行向平台用户打款后由平台使用 [打款金额验证] 接口确认打款验证金额。3: 四要素鉴权（对私银行卡）
	AcctName string `json:"acct_name"`  //付款户名 验证类型为 1 表示平台账户名，2 表示结算账户名。
	AcctNo string `json:"acct_no"` //付款账户号 验证类型为 1 表示平台账户号，2 表示结算账户号。
	PayAmount string `json:"pay_amount"` //汇款金额 验证类型为 1 时返回，需要汇款的金额，单位分。
	DestAcctName string `json:"dest_acct_name"` //验证类型为 1 表示结算账户名，2 表示平台账户名。
	DestAcctNo string `json:"dest_acct_no"` //收款账户账号 验证类型为 1 表示结算账户号，2 表示平台账户号。
	DestAcctBankBranchCode string `json:"dest_acct_bank_branch_code"` //收款账户开户银行联行号 验证类型为 1 表示结算账户开户银行联行号，2 表示平台账户开户银行联行号。
	DestAcctBankAddressCode string `json:"dest_acct_bank_address_code"` //收款账户省市信息 验证类型为 1 表示结算账户省市信息，2 表示平台账户省市信息。
	Memo string `json:"memo"` //收款账户备注信息 用于企业用户账户验证时，填写备注信息
	Deadline string `json:"deadline"` //账户验证截止时间 账户验证截止时间。格式: RFC3339。
}

//删除结算账户返回参数
type ReplyDeleteSettleAcct struct {
	SettleAcctId string `json:"settle_acct_id"` //结算账户 ID 新增结算账户的时候返回的
	OutOrderNo string `json:"out_order_no"` //平台订单号	新增结算账户的时候返回的
	OutUserId string `json:"out_user_id"` //平台用户 Id
	IsDeleted bool `json:"is_deleted"` //是否删除成功
}

//支付充值创建-请求参数
type CreateDeposits struct {
	OutOrderNo string `json:"out_order_no"` //平台订单号
	//SentAt string `json:"sent_at"` //发送时间	 格式: RFC3339
	Amount int `json:"amount"` //支付金额
	OutUserId string `json:"out_user_id"` //用户ID
	DepositType string `json:"deposit_type"` //充值类型
	PaymentType string `json:"payment_type"` //支付类型 支付通道类型。参照支付类型编码
	PaymentTradeNo string `json:"payment_trade_no"` //支付通道订单号
	PaymentSucceededAt string `json:"payment_succeeded_at"` //支付成功时间 RFC3339
	Extra Extra `json:"extra"`

}

//支付充值扩展字段 @CreateDeposits,DepositsInfo
type Extra struct {
	ProductInfos []ProductInfos `json:"product_infos"` //商品信息
}

//支付充值商品信息 @Extra
type ProductInfos struct {
	OrderNo string `json:"order_no"` //订单编号
	OrderAmount int `json:"order_amount"` //订单金额
	ProductName string `json:"product_name"` //商品名称
	ProductCount int `json:"product_count"` //商品数量
}

//支付充值订单信息
type DepositsInfo struct {
	DepositId string `json:"deposit_id"` //系统订单号	由Ping++系统生成的唯一单号
	Status string `json:"status"` //交易状态	succeeded: 成功; processing: 处理中; failed: 失败
	FailedReason string `json:"failed_reason"` //失败时的具体错误原因描述
	CreatedAt string `json:"created_at"` //充值发起时间。格式: RFC3339
	FinishedAt string `json:"finished_at"` //处理完成时间 格式: RFC3339
	OutOrderNo string `json:"out_order_no"` //平台订单号	平台的唯一请求单号
	Amount	 int `json:"amount"` //支付金额	单位为分。充值订单用户实际支付金额
	OutUserId string `json:"out_user_id"` //用户ID
	PaymentType string `json:"payment_type"` //支付类型
	PaymentTradeNo string `json:"payment_trade_no"` //支付通道订单号
	PaymentSucceededAt string `json:"payment_succeeded_at"` //支付成功时间
	RefundedAmount int `json:"refunded_amount"` //已退款金额	充值退款金额，单位为分，未退款时该金额为0。
	Remark	 string `json:"remark"` //备注信息。
	Extra Extra `json:"extra"` //扩展字段
}

//创建提现入参
type CreateWithdrawals struct {
	OutOrderNo string `json:"out_order_no"`//平台订单号
	Amount int `json:"amount"`//金额
	ServiceFee int `json:"service_fee"`//平台手续费
	OutUserId string `json:"out_user_id"`//用户ID
	BankAcctNo string `json:"bank_acct_no"` //提现目标银行账号
	BankAcctType string `json:"bank_acct_type"` //目标银行账号类型	 提现至非绑定账户时必填。枚举值：1 - 对私银行卡，2 - 对公银行账户。
	BankBranchCode string `json:"bank_branch_code"` //开户银行联行号 提现至非绑定账户时必填。
	BankCode string `json:"bank_code"` //开户银行编号	提现至非绑定账户时必填。
	Name string `json:"name"` //开户名称	提现至非绑定账户时必填
	MobileNumber string `json:"mobile_number"` //手机号	提现至非绑定账户时且个人必填
	//password string
}

//提现订单信息
type WithdrawalInfo struct {
	WithdrawalId string `json:"withdrawal_id"` //系统订单号 由 Ping++ 系统生成的唯一单号。
	OutOrderNo string `json:"out_order_no"` //平台订单号
	Status string `json:"status"` //交易状态	processing: 处理中; succeeded: 提现成功; failed: 失败;
	FailedReason string `json:"failed_reason"` //原因描述	失败或退汇时的具体错误原因描述。
	CreatedAt string `json:"created_at"` //创建时间
	FinishedAt string `json:"finished_at"` //完成时间
	Amount int `json:"amount"` //金额
	ServiceFee int `json:"service_fee"` //平台手续费
	OutUserId string `json:"out_user_id"` //用户ID
	BankMemo string `json:"bank_memo"` //银行附言
	Remark string `json:"remark"` //备注
	Extra string `json:"extra"` //扩展字段
}

//获取用户已绑定的结算账户 出参
type GetSettleAcctsInfos struct {
	SettleAccts []SettleAcctInfo `json:"settle_accts"`
}

//打款验证
type PaymentValidate struct {
	SettleAcctId string `json:"settle_acct_id"` //结算账户 ID
	PayAmount int `json:"pay_amount"`//打款验证金额
}